iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 5
0

這篇介紹一些CASSANDRA/SCYLLA的結構名詞,並且說明它們之間的關係,讓大家對於SCYLLA的組織架構有個入門的了解。

系統層面

1. node

節點。

node 為最基本的單點,好理解的方式,就是把它當作一台機器,所以開了3個node,可以當做有3台機器。

2. rack

機架。

1個或多個node的集合,組成一個rack,像是放了一排機器的機櫃,也看作像一個機房的概念。

關於rack的敘述,網路上比較少著墨。

後來找到官網的文章,上面的介紹是說基本與比較通用的做法,一個data center 安排一個rack就好。

如果多個rack,那麼請保持rack裡面的node是一致的。

看來關於rack層次的應用是稍微比較進階和複雜一些,本次鐵人賽應該不會深入這部分,稍微知道概念就好。

3. data center

資料中心

1個或多個rack的集合,組成一個data center,簡稱DC,像是在某個地區,多個機房集成的資料中心、亞洲區,美洲區之類的。

4. cluster

1個或多個DC,形成一個cluster,所以cluster是最高的層級,node是最基本的層級。

總結一下,以上介紹的部分,層次的關係由高到低依序是:

cluster > data center > rack > node


資料結構層面

1. column

column為最小單位 是CASSANDRA/SCYLLA 很特別的特色,起初第一次知道這種設計,真是顛覆以往認知。

關聯式DB(後面都直接叫RDBMS),基本上是以row為最小單位,雖然可以針對資料欄位(column)內容修修改改,不過每次最小基本操作單元,還是以row為主。

在RDBMS,若想要新增一個欄位,勢必要對schema做修改,而schema控制row會出現的欄位結構。

一但寫進schema的column,在儲存的時候最少最少要放個null,空值進去。

當每個row在新增或查詢時,一定看得到每個column,無論內容是否有值,有column就一定佔住了某些儲存空間。

而CASSANDRA/SCYLLA 完全就不是這麼回事,沒有資料就沒column,換句話說不會佔任何空間。

後續我們會介紹ttl,ttl機制簡單來說,設定某個資料的有效時間,超過有效時間,資料就自動消失,這個機制的對象是設定在column上,換句話,所在的column就不見,對照RDBMS來看,真的十分神奇。

2. column family 和 row

column family ,在RDBMS概念來說,很接近table,資料表的感覺。

row 這個名詞RDBMS來說很重要,畢竟是基礎處理單元,不過對於CASSANDRA/SCYLLA 不是很有意義。

找到淺顯的解釋如下:

A column family is a container for an ordered collection of rows.

column family 是個容器,內含著一堆排序過的rows。

Each row, in turn, is an ordered collection of columns.

而每行row,就是一堆排序過的column組合而成。

所以換句話說,自由搭配著column(挑選對象,和前後的順序都是自由選),就可以組出不同的row,而形成不同的column family。

不同的column family ,裡面的column資料可能是在同樣存放的地方,而RDBMS來講,不同的table,裡面的資料一定是不同的個體所在。

引用以下的結構示意圖:

3. keyspace

keyspace 是CASSANDRA/SCYLLA 最外層的資料容器,對外處理的最大單位,是由一堆column family組成,每個keyspace最少會有一個column family。

keyspace 在建立時要注意兩個重點

  1. 複製策略
  2. 複製因子

如以下指令,[]內請帶入自己想要命名的keyspace名稱

CREATE KEYSPACE [Keyspace name]
WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};

下一篇,我們試著從keyspace開始,來著手操作一下SCYLLA的讀寫。

參考資料與圖片引用來源


上一篇
Day4. 淺談分散式DB概念
下一篇
Day6. 入門級動手做#1
系列文
scylla 從零開始攻略30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言